﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using SMA.GENTEv1;
using Telerik.Web.UI;

public partial class Protegidos_Empresas_Cadastros__popup_ecpIncluirContratoFrota : PageBase 
{
    private const int ItemsPerRequest = 10;
    private int idregracontrato = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (Request.QueryString["IdRegraContrato"] != null)
                idregracontrato = int.Parse(Request.QueryString["IdRegraContrato"].ToString());

            if (!IsPostBack)
            {
                Session["VeiculosSel"] = null;
                CarregarComboContrato(rcbContrato);
                CarregarComboLocalidade(rcbLocalidade);
                CarregarComboAnoFab(rcbAnoFab);
                OcultaGradeVeiculos(true);
                if (Request.QueryString["IdRegraContrato"] != null)
                    PreencherDados(idregracontrato);
            }
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    #region Eventos
    protected void btnGravar_Click(object sender, EventArgs e)
    {
        try
        {
            Salvar();
            ExibirResultados(true);
            ExibirMensagem(false, "Operação efetuada com sucesso!");
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void btnFechar_Click(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind();", true);
    }

    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        //if (e.Argument == "RebindContrato")
        //{
        //    RadGrid2.MasterTableView.SortExpressions.Clear();
        //    RadGrid2.MasterTableView.GroupByExpressions.Clear();
        //    RadGrid2.MasterTableView.CurrentPageIndex = RadGrid2.MasterTableView.PageCount - 1;
        //    RadGrid2.Rebind();
        //    CarregarDadosContrato();
        //}
    }

    protected void rgVeiculos_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        try
        {
            if (!e.IsFromDetailTable)
            {
                List<FrotaModelo> listModelo = new List<FrotaModelo>();
                BuscarVeiculos(ref listModelo);
                rgVeiculos.DataSource = listModelo;
            }
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void rgVeiculosSel_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        try
        {
            if (!e.IsFromDetailTable)
            {
                if (Session["VeiculosSel"] != null)
                    rgVeiculosSel.DataSource = (List<FrotaModelo>)Session["VeiculosSel"];
            }
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void rcbFabricante_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
    {
        try
        {
            FrotaFabricante fabricante = new FrotaFabricante();
            List<FrotaFabricante> listFabricante = new List<FrotaFabricante>();
            if (e.Text != string.Empty)
                listFabricante = fabricante.SelectPor(e.Text);

            int itemOffset = e.NumberOfItems;
            int endOffset = Math.Min(itemOffset + ItemsPerRequest, listFabricante.Count);
            e.EndOfItems = endOffset == listFabricante.Count;

            for (int i = itemOffset; i < endOffset; i++)
            {
                rcbFabricante.Items.Add(new RadComboBoxItem(listFabricante[i].Descricao, listFabricante[i].IdFrotaFabricante.ToString()));
            }

            e.Message = GetStatusMessage(endOffset, listFabricante.Count);
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void btnBuscarVeiculo_Click(object sender, EventArgs e)
    {
        try
        {
            BuscarVeiculosFabricante();
            OcultaGradeVeiculos(false);
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void btnAdicionarItem_Click(object sender, EventArgs e)
    {
        try
        {
            AdicionarVeiculo();
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void btnRemoverItem_Click(object sender, EventArgs e)
    {
        try
        {
            RemoverVeiculo();
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }
    #endregion

    #region Metodos
    private void OcultaCampos(bool oculta)
    {
        btnGravar.Visible = !oculta;
    }

    private void OcultaGradeVeiculos(bool oculta)
    {
        trVeiculosSel.Visible = !oculta;
    }

    private void ExibirResultados(bool oculta)
    {
        btnBuscarVeiculo.Visible = !oculta;
        btnGravar.Visible = !oculta;

        trTitulo.Visible = !oculta;
        trContrato.Visible = !oculta;
        trLocalidade.Visible = !oculta;
        trLimiteKM.Visible = !oculta;
        trAnoFabricacao.Visible = !oculta;
        trQtdeMin.Visible = !oculta;
        trTituloVeiculos.Visible = !oculta;
        trFabricante.Visible = !oculta;
        trVeiculosSel.Visible = !oculta;
    }

    private void PreencherDados(int _idregracontrato)
    {
        try
        {
            RadComboBoxItem itemContrato;
            RadComboBoxItem itemLocalidade;
            RadComboBoxItem itemAnoFabricacao;

            FrotaRegraContrato regracontrato = new FrotaRegraContrato(idregracontrato, true, true, true, true, true);

            itemContrato = rcbContrato.Items.FindItemByValue(regracontrato.Contrato.IdContrato.ToString());
            itemLocalidade = rcbLocalidade.Items.FindItemByValue(regracontrato.Localidade.IdCidade.ToString());
            itemAnoFabricacao = rcbAnoFab.Items.FindItemByValue(regracontrato.LimiteAnoFabricacao.IdLimiteAnoFabricacao.ToString());

            rcbContrato.SelectedIndex = itemContrato.Index;
            rcbLocalidade.SelectedIndex = itemLocalidade.Index;
            txtLimiteKM.Text = regracontrato.LimiteKMCarro.ToString();
            rcbAnoFab.SelectedIndex = itemAnoFabricacao.Index;
            txtQtdeMin.Text = regracontrato.QntMinimaCarro.ToString();

            Session["VeiculosSel"] = regracontrato.Modelo;
            rgVeiculosSel.DataSource = regracontrato.Modelo;
            rgVeiculosSel.DataBind();
            OcultaGradeVeiculos(false);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregarComboContrato(RadComboBox _combo)
    {
        try
        {
            Contrato contrato = new Contrato();

            _combo.DataSource = contrato.SelectContratoVigencia(IdPatrocinador, IdPrestador);
            _combo.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregarComboLocalidade(RadComboBox _combo)
    {
        try
        {
            FrotaRegraContrato regranegocio = new FrotaRegraContrato();

            _combo.DataSource = regranegocio.CarregarLocalidadesOrganizacao(IdPrestador);
            _combo.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregarComboAnoFab(RadComboBox _combo)
    {
        try
        {
            FrotaLimiteAnoFabricacao anofab = new FrotaLimiteAnoFabricacao();
            _combo.DataSource = anofab.CarregarComboAnoFabricacao();
            _combo.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void Salvar()
    {
        try
        {
            FrotaRegraContrato regracontrato = new FrotaRegraContrato();
            regracontrato.IdFrotaRegraContrato = idregracontrato;
            if (rcbContrato.SelectedValue != string.Empty)
                regracontrato.Contrato = new Contrato(int.Parse(rcbContrato.SelectedValue));
            if (rcbLocalidade.SelectedValue != string.Empty)
                regracontrato.Localidade = new Cidade(int.Parse(rcbLocalidade.SelectedValue));
            if (txtLimiteKM.Text != string.Empty)
                regracontrato.LimiteKMCarro = int.Parse(txtLimiteKM.Text);
            if (rcbAnoFab.SelectedValue != string.Empty)
                regracontrato.LimiteAnoFabricacao = new FrotaLimiteAnoFabricacao(int.Parse(rcbAnoFab.SelectedValue), false);
            if (txtQtdeMin.Text != string.Empty)
                regracontrato.QntMinimaCarro = int.Parse(txtQtdeMin.Text);

            regracontrato.Modelo = new List<FrotaModelo>();
            for (int i = 0; i < rgVeiculosSel.Items.Count; i++)
            {
                int idmodelo = int.Parse(rgVeiculosSel.MasterTableView.DataKeyValues[i]["IdFrotaModelo"].ToString());
                FrotaModelo modelo = new FrotaModelo(idmodelo, false);

                regracontrato.Modelo.Add(modelo);
            }

            regracontrato.Salvar();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void ExibirMensagem(bool _msgErro, string _textoMsg)
    {
        try
        {
            OcultaMsgPagina(false);
            if (_msgErro)
            {
                lblResultado.ForeColor = System.Drawing.Color.Red;
                lblResultado.Text = _textoMsg;
            }
            else
            {
                lblResultado.ForeColor = System.Drawing.Color.Black;
                lblResultado.Text = _textoMsg;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void OcultaMsgPagina(bool oculta)
    {
        trMensagem.Visible = !oculta;
    }

    private static string GetStatusMessage(int offset, int total)
    {
        try
        {
            if (total <= 0)
                return "No matches";

            return String.Format("Items <b>1</b>-<b>{0}</b> de <b>{1}</b>", offset, total);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void BuscarVeiculos(ref List<FrotaModelo> _modelos)
    {
        try
        {
            FrotaModelo modelo = new FrotaModelo();

            if (rcbFabricante.SelectedValue != string.Empty)
                _modelos = modelo.SelectModelos(int.Parse(rcbFabricante.SelectedValue));
            else
                _modelos = null;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void BuscarVeiculos(ref List<FrotaModelo> _modelos, int[] _excecaoidveiculo)
    {
        try
        {
            FrotaModelo modelo = new FrotaModelo();

            if (rcbFabricante.SelectedValue != string.Empty)
                _modelos = modelo.SelectModelos(int.Parse(rcbFabricante.SelectedValue), _excecaoidveiculo);
            else
                _modelos = null;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void BuscarVeiculosFabricante()
    {
        try
        {
            List<FrotaModelo> listModelo = new List<FrotaModelo>();

            BuscarVeiculos(ref listModelo);

            rgVeiculos.DataSource = listModelo;
            rgVeiculos.DataBind();

            if (Session["VeiculosSel"] != null)
                listModelo = (List<FrotaModelo>)Session["VeiculosSel"];
            else
                listModelo.Clear();

            rgVeiculosSel.DataSource = listModelo;
            rgVeiculosSel.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void BuscarVeiculosFabricante(int[] _excecaoidveiculo, List<FrotaModelo> _veiculosel)
    {
        try
        {
            List<FrotaModelo> listModelo = new List<FrotaModelo>();

            BuscarVeiculos(ref listModelo, _excecaoidveiculo);

            rgVeiculos.DataSource = listModelo;
            rgVeiculos.DataBind();

            rgVeiculosSel.DataSource = _veiculosel;
            rgVeiculosSel.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void AdicionarVeiculo()
    {
        try
        {
            List<FrotaModelo> listModelo = new List<FrotaModelo>();
            List<int> listModeloAdd = new List<int>();

            if (Session["VeiculosSel"] != null)
                listModelo = (List<FrotaModelo>)Session["VeiculosSel"];

            foreach (GridDataItem dataItem in rgVeiculos.MasterTableView.Items)
            {
                if (dataItem.Selected)
                {
                    FrotaModelo modelo = new FrotaModelo(int.Parse(dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["IdFrotaModelo"].ToString()), true, true);
                    listModeloAdd.Add(modelo.IdFrotaModelo);
                    listModelo.Add(modelo);
                    rgVeiculosSel.DataSource = listModelo;
                    rgVeiculosSel.DataBind();
                }
            }

            Session["VeiculosSel"] = listModelo;

            if (rcbFabricante.SelectedValue != string.Empty)
            {
                int[] idmodelo = new int[listModeloAdd.Count];
                for (int i = 0; i < listModeloAdd.Count; i++)
                {
                    idmodelo[i] = listModeloAdd[i];
                }

                BuscarVeiculosFabricante(idmodelo, (List<FrotaModelo>)Session["VeiculosSel"]);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void RemoverVeiculo()
    {
        try
        {
            List<FrotaModelo> listModelo = new List<FrotaModelo>();
            List<int> listModeloRem = new List<int>();

            if (Session["VeiculosSel"] != null)
                listModelo = (List<FrotaModelo>)Session["VeiculosSel"];

            foreach (GridDataItem dataItem in rgVeiculosSel.MasterTableView.Items)
            {
                if (dataItem.Selected)
                {
                    int idmodelo = int.Parse(dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["IdFrotaModelo"].ToString());
                    var consulta = (from modelo in listModelo
                                    where modelo.IdFrotaModelo == idmodelo
                                    select modelo);
                    foreach (var list in consulta.ToList())
                    {
                        listModelo.Remove(list);
                    }
                }
                else
                {
                    int idmodelo = int.Parse(dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["IdFrotaModelo"].ToString());
                    listModeloRem.Add(idmodelo);
                }
            }

            Session["VeiculosSel"] = listModelo;
            rgVeiculosSel.DataSource = listModelo;
            rgVeiculosSel.DataBind();

            if (rcbFabricante.SelectedValue != string.Empty)
            {
                int[] idmodelo = new int[listModeloRem.Count];
                for (int i = 0; i < listModeloRem.Count; i++)
                {
                    idmodelo[i] = listModeloRem[i];
                }

                BuscarVeiculosFabricante(idmodelo, (List<FrotaModelo>)Session["VeiculosSel"]);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    #endregion
}
